
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE Procedure [dbo].[SP_TDMOVI_CAJA_I03]
/*-------------------------------------------------------*/                
/*---Empresa              : OFISIS S.A.                --*/                
/*---Cliente              : OFISIS                 --*/                
/*---Sistema              : Tesoreria                  --*/                
/*---M÷dulo               : Empresa                    --*/                
/*---Programa             : Grabaci÷n Detalle          --*/                
/*---                       Movimiento Caja            --*/                
/*---                           (Ingresos)     --*/                  
/*---Script               : tdcaja_p.sql               --*/                
/*---Nombre SP            : SP_TDMOVI_CAJA_I03         --*/                
/*---Desarrollado por     : Javier Flores A.           --*/                
/*---Fecha Creaci÷n       : 08/07/1999                 --*/                
/*---Base Datos           : Microsoft Sql Server       --*/                
/*---Versi÷n              : 7.0                        --*/                
/*---Invoca a SP          :                            --*/                
/*-------------------------------------------------------*/                
/*-------------------------------------------------------*/                
/*---Modificado 1 por     : EVP                        --*/                
/*---Fecha Modificaci÷n   : 03/04/2001                 --*/                 
/*---Detalle Modificaci÷n : Permite grabar docs. Prov. --*/                
/*---        en Ingreso, correctamente  --*/                
/*-------------------------------------------------------*/                 
/*-------------------------------------------------------*/                
/*---Modificado 2 por     : Reynaldo Menacho           --*/                
/*---Fecha Modificaciön   : 22/04/2005                 --*/                 
/*---Detalle Modificaciön : Busqueda del estado actual o anterior    --*/                
/*---      de los documentos             --*/               
/*-------------------------------------------------------*/              
/*-------------------------------------------------------*/                
/*---ModIficado 3 por     :Maribel Julca Rodriguez     --*/                
/*---Fecha ModIficaci,n   :22/01/2005                  --*/                 
/*---Detalle ModIficaci,n :ingreso de campos CO_USUA_CREA, CO_USUA_MODI --*/                
/*-------------------------------------------------------*/                
/*-------------------------------------------------------*/                
/*---Comentarios                                       --*/                
/*---                                                  --*/                
/*---                                                  --*/                
/*-------------------------------------------------------*/                
/*-------------------------------------------------------*/                
/*--- Drop Proc SP_TDMOVI_CAJA_I03                     --*/                
/*--- Grant Execute on SP_TDMOVI_CAJA_I03 to public    --*/                 
/*--- SP_TDMOVI_CAJA_I03                               --*/                
/*-------------------------------------------------------*/                
 @ISCO_EMPR   TD_VC_002,                 
 @ISCO_USUA_MODI  TD_VC_008_USUA,                
 @ISCO_CAJA   TD_VC_008,                 
 @ISAA_CAJA   TD_VC_004,                 
 @ISMM_CAJA   TD_VC_002,                 
 @ISTI_MOVI   TD_VC_001,                  
 @ISNU_COMP_CAJA  TD_VC_008,                 
 @INNU_SECU   TD_IN_001,                
 @ISTI_ENTI   TD_VC_001,                
 @ISCO_ENTI   TD_VC_020,                
 @ISTI_DOCU_ENTI  TD_VC_003,                
 @ISNU_DOCU_ENTI  TD_VC_020,                
 @ISCO_MONE_DOCU  TD_VC_003,                
 @IDFE_DOCU   TD_DT_001,                
 @INIM_DOCU   TD_NU_016_004,                
 @INIM_SALD_DOCU  TD_NU_016_004,                
 @INIM_DETA   TD_NU_016_004,   
 @INIM_CONV_DOCU  TD_NU_016_004,                
 @ISDE_OBSE   TD_VC_100,                
 @ISST_CIER_DOCU  TD_VC_001_SINO,               
 @INIM_DETA_NEGA  TD_NU_016_004,                
 @ISTI_DOCU   TD_VC_003,                
 @INFA_TIPO_CAMB  TD_NU_015_006,             
 @ISCO_MONE    TD_VC_003,                
 @INIM_SALD_CONV  TD_NU_016_004,                
 @ISNU_RECI_COBR  TD_VC_010,                
 @IDFE_RECI_COBR  TD_DT_001,                
 @ISCO_LIQU   TD_VC_020,                
 @ISTI_MOVI_OPER  TD_VC_001,                
 @ISCO_CNTA_EMPR  TD_VC_020,                
 @ISCO_ORDE_SERV  TD_VC_020,            
 @INFA_CAMB_EXTR TD_NU_015_006            
 As            
Declare                 
 @VNNU_SECU TD_IN_001,@VNIM_MOVI_ANTE  TD_NU_016_004, @VNIM_TOTA TD_NU_016_004,                
 @VNIM_CONV_ANTE TD_NU_016_004, @VNNU_REGI TD_IN_001, @VSST_SIGN TD_VC_001,                
 @VNIM_TOTA_CLIE TD_NU_016_004, @VNIM_TOTA_PROV  TD_NU_016_004, @VNIM_CONV_DOCU TD_NU_016_004,                
 @VSCO_MONE_NACI TD_VC_003, @VSCO_MONE_EXTR TD_VC_003,                
 @VSST_AUXI_0004 TD_VC_001, @VSCO_TIPO_OPER TD_VC_003, @VSCO_ESTA_LETR TD_VC_003,                
 @VNIM_TOTA_DIST TD_NU_016_004, @VSTI_CAMB TD_VC_001, @VSTI_ORIG TD_VC_001, @VDFE_OPER TD_DT_001,              
 @VSCO_ESTA_ORIG TD_VC_003, @VSCO_MONE_MOVI TD_VC_003, @VNFA_CAMB_EXTR TD_NU_015_006, @VSCO_UNID_CONC TD_VC_003,      
 @VSTI_DOCU_PERC TD_VC_003,   @VSNU_SERI_PERC  TD_VC_005,  @VDFE_COMP_PERC TD_DT_001, @VSNU_DOCU_PERC  TD_VC_020      
                
                
 Begin Tran SP_TDMOVI_CAJA_I03                
 SELECT @VSCO_MONE_NACI = CO_MONE_DEFA,                
   @VSCO_MONE_EXTR = CO_MONE_EXTR                
 FROM   TMPARA_TESO                
 WHERE  CO_EMPR = @ISCO_EMPR                
             
 Select  @VSTI_DOCU_PERC = TI_DOCU        
 From TTDOCU_CNTB        
 Where ST_DOCU_0020 = 'S'     
        
             
 If @ISCO_MONE_DOCU != @ISCO_MONE                
 Begin  
            
  Select @VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG                
  From TTFACA_OPCI                
  Where CO_EMPR = @ISCO_EMPR                
  And CO_MODU = 'TEEM0001'                
  And CO_MENU = 'FTEEMAR'                
             
             
  If ( @VSTI_CAMB Is Null Or @VSTI_ORIG Is Null )                
   Select @VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG                
   From TMPARA_TESO                
   Where CO_EMPR = @ISCO_EMPR                
             
  Select @VDFE_OPER = FE_OPER                
  From   TCMOVI_CAJA                
  Where  CO_EMPR = @ISCO_EMPR                 
  and    CO_CAJA = @ISCO_CAJA                
  and    AA_CAJA = @ISAA_CAJA                
  and    MM_CAJA = @ISMM_CAJA                
  and    TI_MOVI = @ISTI_MOVI                
  and    NU_COMP_CAJA = @ISNU_COMP_CAJA                 
           
  Select @VSCO_MONE_MOVI = CO_MONE, @VSCO_UNID_CONC = CO_UNID_CONC      
  From TMCAJA            
  Where  CO_EMPR = @ISCO_EMPR            
  and    CO_CAJA = @ISCO_CAJA  
            
  If @ISCO_MONE_DOCU != @VSCO_MONE_NACI And @ISCO_MONE_DOCU != @VSCO_MONE_EXTR               
   Select @VNIM_CONV_DOCU = Round(dbo.FN_TCFACT_CAMB_Q04(@ISCO_MONE, @ISCO_MONE_DOCU,                           
   @INIM_DETA, @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @VDFE_OPER, @INFA_TIPO_CAMB, @INFA_CAMB_EXTR), 2)              
              
  Else If @VSCO_MONE_MOVI != @VSCO_MONE_NACI And @VSCO_MONE_MOVI != @VSCO_MONE_EXTR              
   Select @VNIM_CONV_DOCU = Round(dbo.FN_TCFACT_CAMB_Q03(@ISCO_MONE, @ISCO_MONE_DOCU,                           
   @INIM_DETA, @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @INFA_TIPO_CAMB, @VNFA_CAMB_EXTR), 2)              
              
  Else              
   Select @VNIM_CONV_DOCU = Round(dbo.FN_TCFACT_CAMB_Q03(@ISCO_MONE, @ISCO_MONE_DOCU,                           
   @INIM_DETA, @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @INFA_TIPO_CAMB, @INFA_CAMB_EXTR), 2)              
            
            
 End                
 Else      
   
  Select @VSCO_UNID_CONC = CO_UNID_CONC      
  From TMCAJA            
  Where  CO_EMPR = @ISCO_EMPR            
  and    CO_CAJA = @ISCO_CAJA  
    
  Select @VNIM_CONV_DOCU = @INIM_DETA                        
              
  If Rtrim(Isnull(@ISCO_CNTA_EMPR, '')) = ''              
   -- Se busca el estado actual del documento              
   Exec SP_TTESTA_ORIG_Q02 @ISCO_EMPR, @ISTI_ENTI, @ISCO_ENTI, @ISTI_DOCU_ENTI, @ISNU_DOCU_ENTI, @VSCO_ESTA_ORIG output              
              
  If @INNU_SECU IS NULL                
  Begin                
   Select @VNNU_SECU = NU_SECU                
   From   TDMOVI_CAJA                
   Where  CO_EMPR = @ISCO_EMPR                
   And CO_CAJA = @ISCO_CAJA                
   And AA_CAJA = @ISAA_CAJA                
   And MM_CAJA = @ISMM_CAJA                 
   And TI_MOVI = @ISTI_MOVI                
   And NU_COMP_CAJA = @ISNU_COMP_CAJA                
              
  If @VNNU_SECU > 0                
   Select @VNNU_SECU = @VNNU_SECU + 1                
  Else                
   Select @VNNU_SECU = 1         
                   
  --Inserta Doc Percepcion                
  If @ISTI_DOCU_ENTI = @VSTI_DOCU_PERC                
  Begin                  
   Select  @VSNU_SERI_PERC = Substring(@ISNU_DOCU_ENTI, 1, Patindex('%-%', @ISNU_DOCU_ENTI)-1)                  
   if @VDFE_OPER Is Null                  
    Select @VDFE_COMP_PERC = @IDFE_DOCU                  
   else                   
    Select @VDFE_COMP_PERC = @VDFE_OPER                  
         
  Exec SP_TCCOMP_PERC_I02 @ISCO_EMPR, @ISCO_USUA_MODI, @ISCO_ENTI, @ISTI_DOCU_ENTI, @ISNU_DOCU_ENTI, @VSNU_SERI_PERC, @VDFE_COMP_PERC, @INFA_TIPO_CAMB, null,null,           
   @ISCO_CAJA,@ISAA_CAJA, @ISMM_CAJA, @ISNU_COMP_CAJA, @VSCO_UNID_CONC, @ISCO_MONE , null,  @INIM_DOCU ,@VSNU_DOCU_PERC OUTPUT               
      
   If @@error <> 0                  
   Begin                  
    Rollback Tran SP_TDMOVI_CAJA_I03      
    Return                  
   End                      
    
   Select @ISNU_DOCU_ENTI = @VSNU_DOCU_PERC                  
  End                 
  --         
       
  Insert Into TDMOVI_CAJA (CO_EMPR, CO_CAJA, AA_CAJA, MM_CAJA, TI_MOVI,                
   NU_COMP_CAJA, NU_SECU, TI_ENTI, CO_ENTI,            
   TI_DOCU_ENTI, NU_DOCU_ENTI, CO_MONE_DOCU, FE_DOCU,            
   IM_DOCU, IM_SALD_DOCU, IM_DETA, IM_CONV_DOCU, DE_OBSE,             
   ST_CIER_DOCU, IM_DETA_NEGA, IM_SALD_CONV, NU_RECI_COBR,            
   FE_RECI_COBR, CO_LIQU, FA_CAMB_EXTR, CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI, TI_MOVI_OPER, CO_CNTA_EMPR, CO_ORDE_SERV)                
  Values (@ISCO_EMPR, @ISCO_CAJA, @ISAA_CAJA, @ISMM_CAJA, @ISTI_MOVI,                
   @ISNU_COMP_CAJA, @VNNU_SECU, @ISTI_ENTI, @ISCO_ENTI, @ISTI_DOCU_ENTI,                 
   @ISNU_DOCU_ENTI, @ISCO_MONE_DOCU, @IDFE_DOCU, @INIM_DOCU, @INIM_SALD_DOCU,                 
   @INIM_DETA, @VNIM_CONV_DOCU, @ISDE_OBSE, @ISST_CIER_DOCU, @INIM_DETA_NEGA, @INIM_SALD_CONV,                 
   @ISNU_RECI_COBR, @IDFE_RECI_COBR, @ISCO_LIQU, @INFA_CAMB_EXTR, @ISCO_USUA_MODI, GETDATE(), @ISCO_USUA_MODI, GETDATE(), @ISTI_MOVI_OPER,                 
   @ISCO_CNTA_EMPR, @ISCO_ORDE_SERV)                
             
  If @@error <> 0                
  Begin                
   Rollback Tran SP_TDMOVI_CAJA_I03                
   Return                
  End                    
             
  If @ISST_CIER_DOCU = 'S'And Rtrim(Isnull(@ISCO_CNTA_EMPR, '')) = ''              
  Begin              
   --Se cancela el documento y se graba en tabla de kardex de estados de documentos              
   Exec SP_TTACTU_PAGO_Q01 @ISCO_EMPR, @ISTI_ENTI, @ISCO_ENTI, @ISTI_DOCU_ENTI, @ISNU_DOCU_ENTI,               
    @INIM_SALD_DOCU, 'PAG', @ISCO_USUA_MODI, @ISST_CIER_DOCU  -- MIGUEL             
               
   If @@error <> 0                
   Begin                
    Rollback Tran SP_TDMOVI_CAJA_I03                
    Return                
   End                    
  End              
  Else              
   If @ISST_CIER_DOCU = 'N'And Rtrim(Isnull(@ISCO_CNTA_EMPR, '')) = ''                 Begin              
    --Se cancela el documento y se graba en tabla de kardex de estados de documentos              
    Exec SP_TTACTU_PAGO_Q01 @ISCO_EMPR, @ISTI_ENTI, @ISCO_ENTI, @ISTI_DOCU_ENTI, @ISNU_DOCU_ENTI,              
              
    @VNIM_CONV_DOCU, @VSCO_ESTA_ORIG, @ISCO_USUA_MODI, @ISST_CIER_DOCU              
                
    If @@error <> 0                
    Begin                
     Rollback Tran SP_TDMOVI_CAJA_I03                
     Return                
    End                    
   End               
              
 End                
 Else                 
 Begin                
             
  Select @VNIM_CONV_ANTE = Isnull(IM_CONV_DOCU,0)                
  From   TDMOVI_CAJA                 
  Where  CO_EMPR = @ISCO_EMPR                
  And CO_CAJA = @ISCO_CAJA                
  And AA_CAJA = @ISAA_CAJA                
  And MM_CAJA = @ISMM_CAJA                
  And TI_MOVI = @ISTI_MOVI                
        And NU_COMP_CAJA = @ISNU_COMP_CAJA            
  And NU_SECU = @INNU_SECU                 
             
             
  If Rtrim(Isnull(@ISCO_CNTA_EMPR, '')) = ''                
   Update TDMOVI_CAJA                 
   Set    IM_DETA = @INIM_DETA,                
   IM_CONV_DOCU = @VNIM_CONV_DOCU,                              
   DE_OBSE = @ISDE_OBSE,                
   ST_CIER_DOCU = @ISST_CIER_DOCU,                
   IM_DETA_NEGA = @INIM_DETA_NEGA,                
   FE_USUA_MODI = getdate(),                
   CO_USUA_MODI = @ISCO_USUA_MODI                
   Where CO_EMPR = @ISCO_EMPR                
   And CO_CAJA = @ISCO_CAJA                
   And AA_CAJA = @ISAA_CAJA                
   And MM_CAJA = @ISMM_CAJA                
   And TI_MOVI = @ISTI_MOVI                
   And NU_COMP_CAJA = @ISNU_COMP_CAJA                
   And NU_SECU = @INNU_SECU                
  Else              
   Update TDMOVI_CAJA                 
   Set TI_MOVI_OPER = @ISTI_MOVI_OPER,              
   CO_CNTA_EMPR = @ISCO_CNTA_EMPR,              
   TI_ENTI = @ISTI_ENTI,              
   CO_ENTI = @ISCO_ENTI,              
   CO_ORDE_SERV = @ISCO_ORDE_SERV,              
   IM_DETA = @INIM_DETA,              
   IM_CONV_DOCU = @VNIM_CONV_DOCU,                            
   DE_OBSE = @ISDE_OBSE,              
   ST_CIER_DOCU = @ISST_CIER_DOCU,              
   IM_DETA_NEGA = @INIM_DETA_NEGA,              
   FE_USUA_MODI = getdate(),              
   CO_USUA_MODI = @ISCO_USUA_MODI              
   Where CO_EMPR = @ISCO_EMPR                
   And CO_CAJA = @ISCO_CAJA                
   And AA_CAJA = @ISAA_CAJA                
   And MM_CAJA = @ISMM_CAJA                
   And TI_MOVI = @ISTI_MOVI                
   And NU_COMP_CAJA = @ISNU_COMP_CAJA                
   And NU_SECU = @INNU_SECU                
             
             
  If @@error <> 0                
  Begin                
   Rollback Tran SP_TDMOVI_CAJA_I03                
   Return                
  End                  
             
  Select @VNIM_CONV_DOCU = @VNIM_CONV_DOCU - @VNIM_CONV_ANTE              
              
  If @ISST_CIER_DOCU = 'S' And Rtrim(Isnull(@ISCO_CNTA_EMPR, '')) = ''              
  -- - Round(@VNIM_CONV_ANTE,2) + Round(@VNIM_CONV_DOCU,2)              
  Begin              
   --Se cancela el documento y se graba en tabla de kardex de estados de documentos              
   Exec SP_TTACTU_PAGO_Q01 @ISCO_EMPR, @ISTI_ENTI, @ISCO_ENTI, @ISTI_DOCU_ENTI, @ISNU_DOCU_ENTI,               
   @VNIM_CONV_DOCU, 'PAG', @ISCO_USUA_MODI, @ISST_CIER_DOCU              
               
   If @@error <> 0                
   Begin                
    Rollback Tran SP_TDMOVI_CAJA_I03               
    Return                
   End                    
  End              
  Else               
   If @ISST_CIER_DOCU = 'N' And Rtrim(Isnull(@ISCO_CNTA_EMPR, '')) = ''              
   Begin              
    --Se cancela el documento y se graba en tabla de kardex de estados de documentos              
    Exec SP_TTACTU_PAGO_Q01 @ISCO_EMPR, @ISTI_ENTI, @ISCO_ENTI, @ISTI_DOCU_ENTI, @ISNU_DOCU_ENTI,         
              
    @VNIM_CONV_DOCU, @VSCO_ESTA_ORIG, @ISCO_USUA_MODI, @ISST_CIER_DOCU              
                
    If @@error <> 0                
    Begin                
     Rollback Tran SP_TDMOVI_CAJA_I03               
     Return                
    End                    
   End              
             
             
 End                     
             
 Select  @VNIM_MOVI_ANTE  = Isnull(IM_MOVI,0)                 
 From    TCMOVI_CAJA                
 Where   CO_EMPR = @ISCO_EMPR                 
 And CO_CAJA = @ISCO_CAJA                
 And AA_CAJA = @ISAA_CAJA                
 And MM_CAJA = @ISMM_CAJA                 
 And TI_MOVI = @ISTI_MOVI                
 And NU_COMP_CAJA = @ISNU_COMP_CAJA                
             
 /* Sumo todos los documentos de clientes */                
             
 Select  @VNIM_TOTA_CLIE = Isnull(Sum(Isnull(IM_DETA_NEGA,0)),0)                
 From    TDMOVI_CAJA                
 Where   CO_EMPR = @ISCO_EMPR                
 And CO_CAJA = @ISCO_CAJA                
 And AA_CAJA = @ISAA_CAJA                
 And MM_CAJA = @ISMM_CAJA                
 And TI_MOVI = @ISTI_MOVI                
 And NU_COMP_CAJA = @ISNU_COMP_CAJA                
 And TI_ENTI = 'C'                
             
 /* Sumo todos los documentos de proveedores */                
             
 Select  @VNIM_TOTA_PROV = Isnull(Sum(Isnull(IM_DETA_NEGA,0)),0)                
 From    TDMOVI_CAJA                
 Where   CO_EMPR = @ISCO_EMPR                
 And CO_CAJA = @ISCO_CAJA                
 And AA_CAJA = @ISAA_CAJA                
 And MM_CAJA = @ISMM_CAJA                
 And TI_MOVI = @ISTI_MOVI                
 And NU_COMP_CAJA = @ISNU_COMP_CAJA                
 And TI_ENTI = 'P'                
             
 Select  @VNIM_TOTA_DIST = Isnull(Sum(Isnull(IM_DETA_NEGA,0)),0)                 
 From    TDMOVI_CAJA                
 Where   CO_EMPR = @ISCO_EMPR                
 And CO_CAJA = @ISCO_CAJA                
 And AA_CAJA = @ISAA_CAJA                
 And MM_CAJA = @ISMM_CAJA                
 And TI_MOVI = @ISTI_MOVI                
 And NU_COMP_CAJA = @ISNU_COMP_CAJA                
 And TI_ENTI != 'P'                
 And TI_ENTI != 'C'                
             
 Select  @VNIM_TOTA = ISNULL(@VNIM_TOTA_CLIE,0) + ISNULL(@VNIM_TOTA_PROV,0) + ISNULL(@VNIM_TOTA_DIST,0)                
             
 Select  @VSST_AUXI_0004 = T1.ST_AUXI_0004                
 From    TTTIPO_OPER T1, TCMOVI_CAJA T2                
 Where   T1.CO_EMPR = @ISCO_EMPR                
 And T1.CO_EMPR = T2.CO_EMPR                
 And T1.CO_TIPO_OPER = T2.CO_TIPO_OPER                
 And T2.CO_CAJA = @ISCO_CAJA                
 And T2.AA_CAJA = @ISAA_CAJA                
 And T2.MM_CAJA = @ISMM_CAJA                
 And T2.TI_MOVI = @ISTI_MOVI                
 And T2.NU_COMP_CAJA = @ISNU_COMP_CAJA                
             
             
 Update  TCMOVI_CAJA                
 Set     IM_MOVI = Round(@VNIM_TOTA,2),                
   CO_USUA_MODI = @ISCO_USUA_MODI,                 
   FE_USUA_MODI = getdate()                         
 Where   CO_EMPR = @ISCO_EMPR             
 And CO_CAJA = @ISCO_CAJA            
 And AA_CAJA = @ISAA_CAJA            
 And MM_CAJA = @ISMM_CAJA             
 And TI_MOVI = @ISTI_MOVI            
 And NU_COMP_CAJA = @ISNU_COMP_CAJA             
             
 If @@error <> 0            
 Begin            
  Rollback Tran SP_TDMOVI_CAJA_I03            
  Return            
 End            
                     
Commit Tran SP_TDMOVI_CAJA_I03            
/*-------------------------- Fin ------------------------------*/ 
GO
